@file:Suppress("MemberVisibilityCanBePrivate")

package com.even.camerarecoder

import java.lang.reflect.Modifier

object ReflectUtil {

    /** 获取指定类中的所有public static int类型的变量 */
    fun getAllPublicStaticIntField(clazz: Class<*>): Map<Int, String> {
        val fieldsMap: MutableMap<Int, String> = HashMap()
        clazz.fields.filter {
            Modifier.isPublic(it.modifiers)
                    && Modifier.isStatic(it.modifiers)
                    && it.genericType === Int::class.javaPrimitiveType
        }.forEach {
            fieldsMap[it.get(null) as Int] = it.name
        }
        return fieldsMap
    }

    /** 返回指定的值对应的是指定类的哪个变量，如果没有对应的变量，则返回value自身 */
    fun getPublicStaticIntFieldNameByValue(clazz: Class<*>, value: Int): String {
        return getAllPublicStaticIntField(clazz)[value] ?: value.toString()
    }

}